package com.gxa.common.utils;

import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.exception.CosClientException;
import com.qcloud.cos.model.GetObjectRequest;
import com.qcloud.cos.model.ObjectMetadata;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.region.Region;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * @ClassName Util02
 * @Description  使用腾讯云存储的工具类
 * @Author Mr.YUAN
 * @Date 2022/10/20 18:04
 */

public class ImageUtil {
    // 1 初始化用户身份信息(secretId, secretKey)
    static COSCredentials cred = new BasicCOSCredentials("AKID9E7wjIvUvAAuSs3c5XqtfIit1xpVwEJJ", "GMPIxOajlfJmJhxEMRKyMWQ5TcYAYjnf");
    // 2 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
    // clientConfig中包含了设置region, https(默认http), 超时, 代理等set方法, 使用可参见源码或者接口文档FAQ中说明
    static ClientConfig clientConfig = new ClientConfig(new Region("ap-chengdu"));
    // 3 生成cos客户端
    static COSClient cosClient = new COSClient(cred, clientConfig);
    // bucket的命名规则为{name}-{appid} ，此处填写的存储桶名称必须为此格式
    static String bucketName = "smart-1312280851";
    // 指定要上传到 COS 上对象键
    // 对象键（Key）是对象在存储桶中的唯一标识。例如，在对象的访问域名 `bucket1-1250000000.cos.ap-chengdu.myqcloud.com/mydemo.jpg` 中，对象键为 mydemo.jpg, 详情参考 [对象键](https://cloud.tencent.com/document/product/436/13324)
    static  String key = "smartImg/";

    //把路径和文件名传进来
    public static String upload(MultipartFile multipartFile){
        // 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20M以下的文件使用该接口
        // 大文件上传请参照 API 文档高级 API 上传
        //file里面填写本地图片的位置 我这里是相对项目的位置，在项目下有src/test/demo.jpg这张图片
        String imgUrl;
        try {
            String fileName = multipartFile.getOriginalFilename();
            File file = null;
            try {
                String originalFilename1 = multipartFile.getOriginalFilename();
                String originalFilename = "你好呀" + originalFilename1;
                String[] filename = originalFilename.split("\\.");
                file = File.createTempFile(filename[0], filename[1]);
                multipartFile.transferTo(file);
                file.deleteOnExit();
            } catch (IOException e) {
                e.printStackTrace();
            }

//        File file1 = new File(file.getOriginalFilename());
//        File localFile = new File(fileUrl);
//        File localFile = file;
            String extName = fileName.substring(fileName.lastIndexOf(".") + 1);
            System.out.println("extName=" + extName);
            UUID uuid = UUID.randomUUID();
            String fileName01 = uuid + "." + extName;
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key + fileName01, file);
            PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
//            String etag = putObjectResult.getETag();  // 获取文件的 etag

            imgUrl = "https://smart-1312280851.cos.ap-chengdu.myqcloud.com/smartImg/" + fileName01;
            System.out.println(imgUrl);
        } catch (CosClientException e) {
            e.printStackTrace();
            return "图片命名不得少于三个字符！";
        }
        return imgUrl;
    }

//    public static void download(){
//        // 设置要下载到的本地路径
//        File downFile = new File("src/test/medemo.jpg");
//        // 设置要下载的文件所在的 对象桶的名称 和对象键
//        GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
//        ObjectMetadata downObjectMeta = cosClient.getObject(getObjectRequest, downFile);
//    }

//    public static void del(String fileName){
//        // 指定要删除的 bucket 和对象键
//        cosClient.deleteObject(bucketName, key+fileName);
//    }

    //main方法中测试
//    public static void main(String[] args) {
//        System.out.println(upload("E:\\gxa\\other\\篮球.jpg","yjl02.jpg"));
        //download();
//         del("fb137175-c1b2-4142-8858-5d4b6c0b8640.jpg");
//    }

}